Controller Area Network (CAN) is a serial communications protocol which efficiently supports distributed real-time control with a high level of security. Applications of CAN range from high speed digital communications networks to low cost multiplex wiring. CAN is a high-integrity serial data communications bus for real-time applications. CAN operates at data rates of up to 1 Megabits per second, has excellent error detection and confinement capabilities, and was originally developed for use in automobiles. The motivation behind CAN was to make automobiles more reliable, safe and fuel-efficient by improving the interoperability of automotive electronics, engine control units, sensors, anti-skid brake systems, etc., while decreasing wiring harness weight and complexity. Since CAN's inception, the CAN protocol has gained widespread popularity in industrial automation and automotive/truck applications. The robustness of the CAN bus in noisy environments and the ability to detect and recover from fault conditions makes CAN suitable for use with, industrial control equipment, medical equipment, test equipment, mobile and portable machines, appliances, etc.
CAN is an asynchronous serial bus system with one logical bus comprising for example two wires. It has an open, linear bus structure with equal bus nodes. A CAN bus consists of two or more nodes. The number of nodes on the bus may be changed dynamically without disturbing the communication of the other nodes.
The CAN logic bus corresponds to a “wired-OR” mechanism, “recessive” bits (mostly, but not necessarily equivalent to the logic level “1”) are overwritten by “dominant” bits (mostly logic level “0”). As long as no bus node is sending a dominant bit, the bus line is in the recessive state, but a dominant bit from any bus node generates the dominant bus state. Therefore, for the CAN bus line, a medium is chosen that is able to transmit the two possible bit states (dominant and recessive). A common physical medium used is a twisted wire pair. The bus wires are then called “CANH” and “CANL,” and may be connected directly to the CAN controller nodes or via a connector thereto.
In the CAN bus protocol it is not bus nodes that are addressed, but rather the address information is contained in the messages that are transmitted. This is done via an identifier (part of each message) which identifies the message content, e.g., engine speed, oil temperature, etc. The identifier additionally indicates the priority of the message. The lower the binary value of the identifier, the higher the priority of the message (more dominant bits).
In a CAN controller the architecture is similar to a simple UART, except that complete frames are sent instead of characters: there is (typically) a single transmit buffer, and a double-buffered receive buffer. The CPU puts a frame in the transmit buffer, and takes an interrupt when the frame is sent; the CPU receives a frame in the receive buffer, takes an interrupt and empties the buffer (before a subsequent frame is received). The CPU must manage the transmission and reception, and handle the storage of the frames.”
During initialization the transmitting device and the receiving device generally program their respective CAN modules to use a predetermined CAN frequency. However, in many applications this frequency may not be known. Also, the length of each CAN bit can vary by approximately 20% around some nominal length. Moreover, in a running system, there are no “known initialization transmissions” to which a system can be synchronized. In other words, if a device is coupled to an already established CAN bus system, the content of the transferred messages is unknown. Thus, in conventional systems, a trial and error method may be used to determine the correct operating frequency of the CAN Bus which can result in a very long set-up time or may even fail entirely. In other serial bus systems, an initialization phase may be performed using synchronizing character sequences such as “5555” or “AAAA”. However, such initialization routines may not be available in particular if a CAN bus is already be in operation.
Hence, there is a need for an improved auto-speed detect system and method for a microcontroller with a CAN module which allows for a quick determination of an operating frequency used in a CAN system.